package com.dsl.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @Description aop
 * @Author dsl
 * @Date 2024/9/11 下午7:50
 * @Version 1.0
 */

//@Component
//@Aspect
public class AlphaAspect {

    //定义切点(com.dsl.service包下所有的类的所有的方法及参数及返回值)
    // 第一个*表示所有的返回值都行，第二个*表示com.dsl.service包下所有的类，第三个*表示所有的方法，第四个..表示所有的参数
    @Pointcut("execution(* com.dsl.service.*.*(..))")
    public void pointcut(){

    }

    @Before("pointcut()")
    public void before(){
        System.out.println("before");
    }

    @After("pointcut()")
    public void after(){
        System.out.println("after");
    }

    @AfterReturning("pointcut()")
    public void afterReturning(){
        System.out.println("afterReturning");
    }

    @AfterThrowing("pointcut()")
    public void afterThrowing(){
        System.out.println("afterThrowing");
    }

    @Around("pointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("around before");
        Object obj = joinPoint.proceed();
        System.out.println("around after");
        return obj;
    }

}
